package com.bzyd.ss.authority.impl;

import com.bzyd.ss.authority.AuthorityPermit;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * 自定授权管理实现
 * 本类型的对象，必须被Spring容器管理，否则在Spring Security配置类中无法获取此对象
 * 常使用路径地址作为映射规则，直接匹配资源信息，不匹配角色信息
 * 数据库中保存的是权限数据库是：/login /logout /toMain 等
 * 代码中通过request.getServletPath()获取资源路径进行校验
 * 但此种通常不被推荐使用，需要考虑的情况太复杂了
 */
@Component("customAuthorityPermit")
public class MyAuthorityPermitImpl implements AuthorityPermit {

    @Override
    public boolean hasAuthority(HttpServletRequest request, Authentication authentication) {
        if (authentication.getAuthorities().contains(new SimpleGrantedAuthority(request.getServletPath()))){
            // 登录有权限，可以访问
            return true;
        }
        return false;
    }
}
